/**
 * Copyright 2007-2008. Chongqing First Information & Network Co., Ltd. All
 * rights reserved. <a>http://www.cqfirst.com.cn</a>
 */
package com.cqcis.uip.base.framework.core;

import java.net.URL;

import org.osgi.framework.BundleContext;
import org.springframework.context.ApplicationContext;

import com.cqcis.uip.base.framework.common.Task;
import com.cqcis.uip.base.framework.core.channel.Channel;
import com.cqcis.uip.base.framework.service.StreamLogOutputService;

/**
 * 注册服务上下文
 * 
 * @author huangmy
 * @date   2008-1-10
 */
public interface RegisteredServiceContext {
	/**
	 * 服务上下文, 通道
	 * 
	 * @return
	 */
    public Channel getChannel();
    
    /**
     * 获取服务库
     * 
     * @return
     */
    public RegisteredServiceRepository getServiceRepository();
    
    /**
     * 日志服务
     * 
     * @return
     */
    public LogService getLogService();
    
    /**
     * 当前服务
     * 
     * @return
     */
    public RegisteredService getRegisteredService();
    
    /**
     * 获取资源
     * 
     * @param name
     * @return
     */
    public URL getResource(String name);
    
    /**
     * 异常处理
     * 
     * @param t
     */
    public void catchException(Task task, Throwable t);
    
    /**
     * 服务监听器
     * 
     * @param listener
     */
    public void addServiceListener(RegisteredServiceListener listener);   
    
    /**
     * 发布事件
     * 
     * @param event
     */
    public void publishRegisteredServiceEvent(RegisteredServiceEvent event);
    
    /**
     * 日志服务
     * 
     * @return
     */
    public StreamLogOutputService getStreamLogOutputService();
    
    /**
     * BundleContext
     * 
     * @return
     */
    public BundleContext getBundleContext();
    
    /**
     * 应用上下文
     * 
     * @return
     */
    public ApplicationContext getApplicationContext();
    
    /**
     * 获取 ServletContainer
     * 
     * @param port
     * @return
     */
    public ServletContainer getServletContainer(int port);
}
